我的Bilibili频道:香芋派Taro
我的个人博客:taropie0224.github.io(阅读体验更佳)
我的公众号:香芋派的烘焙坊
我的音频技术交流群:1136403177
我的个人微信:JazzyTaroPie

https://leetcode-cn.com/problems/spiral-matrix/

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Solution
{
public:
vector<int> spiralOrder(vector<vector<int> > &matrix)
{

//行列数
int m = matrix.size();
int n = matrix[0].size();

//上下左右标记
int top = 0;
int down = m - 1;
int left = -1;
int right = n - 1;

int num = 0; //记录标号
vector<int> ans(m * n); //存储结果,为了提速,先分配大小为m*n

//循环赋值
while (num < m * n)
{
if (++left > right)
break;
for (int i = left; i <= right; ++i)
ans[num++] = matrix[top][i];
if (++top > down)
break;
for (int i = top; i <= down; ++i)
ans[num++] = matrix[i][right];
if (--right < left)
break;
for (int i = right; i >= left; --i)
ans[num++] = matrix[down][i];
if (--down < top)
break;
for (int i = down; i >= top; --i)
ans[num++] = matrix[i][left];
}

return ans;
}
};

思路

这个题解其实是找了个大佬的写法,比我的干净太多了…值得学习!

标记边界后循环输出即可。